package br.com.caim.viewcontroller.remocao;

import javax.mail.Message;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.caim.bo.entidade.Conta;
import br.com.caim.email.excecoes.sistema.ContaEmailIndisponivelException;
import br.com.caim.email.receb.IRecebimentoEmail;
import br.com.caim.email.receb.impl.RecebimentoEmail;
import br.com.caim.email.remocao.IRemocaoMensagem;
import br.com.caim.email.remocao.impl.RemocaoMensagem;
import br.com.caim.viewcontroller.ActionPadrao;

public class RemocaoMensagemAction extends ActionPadrao {
	
	private String FW_CAIXA_ENTRADA = "fwTelaPrincipal";
	IRemocaoMensagem remMsg = new RemocaoMensagem();
	IRecebimentoEmail recebMsgs = new RecebimentoEmail();
	
	public ActionForward apagarMensagem(ActionMapping mapping, ActionForm genericForm, HttpServletRequest request, HttpServletResponse response) throws ContaEmailIndisponivelException {
		RemocaoMensagemForm form = (RemocaoMensagemForm) genericForm;
		
		Conta conta = (Conta) request.getSession().getAttribute("contaSelecionada"); 
		Message msgs[] = (Message[]) request.getSession().getAttribute("mensagensNovas");
		
		String strNumeroMensagem = form.getCboxes();
		if(strNumeroMensagem == null) {
			return mapping.findForward(FW_CAIXA_ENTRADA);
		}
		
		int numeroMsg = Integer.parseInt(strNumeroMensagem);
		
		// Marca, no servidor, a mensagem como DELETED
		remMsg.apagarMensagem(numeroMsg, conta);
		
		Message arrayAtualizado[] = new Message[msgs.length - 1];
		int countArrayAtualizado = 0;
		for(int i = 0; i < msgs.length; i++) {
			if(msgs[i].getMessageNumber() != numeroMsg) {
				arrayAtualizado[countArrayAtualizado++] = msgs[i];
			}
		}
		
		request.getSession().setAttribute("mensagensNovas", arrayAtualizado);
		
		return mapping.findForward(FW_CAIXA_ENTRADA);
	}
	
}
